/**
 * 数据迁移工具 - 用于将localStorage数据迁移到数据库
 */
const { PrismaClient } = require('@prisma/client');
const prisma = new PrismaClient();

/**
 * 从JSON字符串迁移促销设置
 * @param {string} jsonSettings - localStorage中的促销设置JSON字符串
 */
async function migratePromotionSettings(jsonSettings) {
  try {
    if (!jsonSettings) {
      console.log('没有提供促销设置数据，跳过迁移');
      return { success: false, message: '没有提供促销设置数据' };
    }
    
    // 解析JSON
    const settingsData = JSON.parse(jsonSettings);
    
    // 检查是否已存在促销设置
    const existingSettings = await prisma.promotionSetting.findFirst();
    
    if (existingSettings) {
      // 更新现有设置
      await prisma.promotionSetting.update({
        where: { id: existingSettings.id },
        data: {
          config: JSON.stringify(settingsData),
          updatedAt: new Date()
        }
      });
      
      console.log('成功更新促销设置');
      return { success: true, message: '成功更新促销设置' };
    } else {
      // 创建新设置
      const newSettings = await prisma.promotionSetting.create({
        data: {
          config: JSON.stringify(settingsData)
        }
      });
      
      console.log('成功创建促销设置:', newSettings);
      return { success: true, message: '成功创建促销设置', data: newSettings };
    }
  } catch (error) {
    console.error('迁移促销设置失败:', error);
    return { success: false, message: '迁移促销设置失败', error: error.message };
  }
}

/**
 * 迁移渠道价格数据
 * @param {Array} channelPrices - 渠道价格数据
 */
async function migrateChannelPrices(channelPrices) {
  try {
    if (!channelPrices || !Array.isArray(channelPrices) || channelPrices.length === 0) {
      console.log('没有提供渠道价格数据，跳过迁移');
      return { success: false, message: '没有提供渠道价格数据' };
    }
    
    // 用于记录成功和失败的计数
    const result = {
      total: channelPrices.length,
      created: 0,
      updated: 0,
      failed: 0,
      errors: []
    };
    
    // 遍历渠道价格数据并添加/更新到数据库
    for (const priceItem of channelPrices) {
      try {
        const { productId, channelId, price } = priceItem;
        
        // 参数验证
        if (!productId || !channelId || price === undefined) {
          result.failed++;
          result.errors.push(`缺少必要参数: ${JSON.stringify(priceItem)}`);
          continue;
        }
        
        // 查找现有价格
        const existingPrice = await prisma.productPrice.findFirst({
          where: {
            productId: parseInt(productId),
            channelId: parseInt(channelId)
          }
        });
        
        if (existingPrice) {
          // 更新现有价格
          await prisma.productPrice.update({
            where: {
              id: existingPrice.id
            },
            data: {
              price: parseFloat(price)
            }
          });
          result.updated++;
        } else {
          // 创建新价格
          await prisma.productPrice.create({
            data: {
              productId: parseInt(productId),
              channelId: parseInt(channelId),
              price: parseFloat(price)
            }
          });
          result.created++;
        }
      } catch (itemError) {
        result.failed++;
        result.errors.push(itemError.message);
      }
    }
    
    console.log('渠道价格迁移结果:', result);
    return { success: (result.failed === 0), result };
  } catch (error) {
    console.error('迁移渠道价格失败:', error);
    return { success: false, message: '迁移渠道价格失败', error: error.message };
  }
}

/**
 * 迁移配置服务数据
 * @param {Object} configs - 配置数据对象，键为配置名，值为配置数据
 */
async function migrateConfigs(configs) {
  // 这个函数实现根据具体需求定制
  // 一般来说，这些配置应该已经由配置服务同步到了数据库
  // 此处仅作为示例
  console.log('配置服务数据迁移功能待实现');
  return { success: true, message: '配置服务数据迁移功能待实现' };
}

module.exports = {
  migratePromotionSettings,
  migrateChannelPrices,
  migrateConfigs
}; 